/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Initial Developer of the Original Code is
*   Nick Kreeger
* Portions created by the Initial Developer are Copyright (C) 2006-2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*   Nick Kreeger <nick.kreeger@park.edu>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

#import <Cocoa/Cocoa.h>
#import "nsISupports.h"
#import "nsISupportsArray.h"

@class AccountSettingsItem;
@class AccountOverviewView;
@class ServerSettingsView;
@class SecuritySettingsView;
@class OutgoingServersView;
@class SmtpServerItem;

@protocol AccountManagerViewDelegate

-(void)updateWithSupportsItem:(nsISupports*)aSupportsItem;
-(void)saveChanges;
//-(BOOL)containsChanges;  I don't think I will want this.

@end

@interface AccountManagerDlgController : NSObject 
{
  IBOutlet NSWindow*      mWindow;
  IBOutlet NSOutlineView* mAccountOutlineView;
  IBOutlet NSButton*      mAddAccountButton;
  IBOutlet NSButton*      mSetAsDefaultButton;
  IBOutlet NSButton*      mRemoveAccountButton;
  IBOutlet NSButton*      mCancelButton;
  IBOutlet NSButton*      mOKButton;
  IBOutlet NSView*        mSettingsView;
  
  IBOutlet AccountOverviewView*  mAccountOverviewView;
  IBOutlet ServerSettingsView*   mServerSettingsView;
  IBOutlet SecuritySettingsView* mSecuritySettingsView;
  IBOutlet OutgoingServersView*  mOutgoingServersView;
  
  AccountSettingsItem* mRootSettingsItem;  // root node of the outline tree
  AccountSettingsItem* mSelectedSettingsItem;
  NSView<AccountManagerViewDelegate>* mCurView;
}

+(id)sharedInstance;

-(void)showAccountManager:(NSWindow*)aParentWindow;
-(void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;

-(IBAction)addAccount:(id)sender;
-(IBAction)setAccountAsDefault:(id)sender;
-(IBAction)removeAccount:(id)sender;
-(IBAction)closeDialog:(id)sender;
-(IBAction)cancel:(id)sender;

@end

#pragma mark -

@interface AccountOverviewView : NSView <AccountManagerViewDelegate>
{
  IBOutlet NSPopUpButton* mOutgoingSMTPPopup;
  IBOutlet NSTextField*   mAccountNameField;
  IBOutlet NSTextField*   mYourNameField;
  IBOutlet NSTextField*   mEmailAddressField;
  IBOutlet NSTextField*   mReplyToAddressField;
  IBOutlet NSTextField*   mOrganizationField;
  
  nsISupports* mSupportsObject;
}

@end

#pragma mark -

@interface ServerSettingsView : NSView <AccountManagerViewDelegate>
{
  IBOutlet NSTextField* mServerTypeField;
  IBOutlet NSTextField* mServerNameField;
  IBOutlet NSTextField* mUserNameField;
  IBOutlet NSTextField* mPortField;
  IBOutlet NSButton*    mCheckMessagesOnStartupCheckbox;
  IBOutlet NSButton*    mCheckForMessagesOnTimerCheckbox;
  IBOutlet NSTextField* mTimerMinutesFieldCheckbox;
  IBOutlet NSButton*    mAutoDownloadNewMessages;
  IBOutlet NSButton*    mOnlyFetchHeadersCheckbox;
  IBOutlet NSButton*    mLeaveMessagesOnServerCheckbox;
  IBOutlet NSButton*    mLeaveMessagesForMinDaysCheckbox;
  IBOutlet NSTextField* mNumMinDaysToKeepField;
  IBOutlet NSButton*    mEmptyTrashOnExitCheckbox;
  
  nsISupports* mSupportsObject;
}

-(IBAction)didClickAutoDownloadCheckbox:(id)sender;

@end

#pragma mark -

@interface SecuritySettingsView : NSView <AccountManagerViewDelegate>
{
  IBOutlet NSMatrix* mSecureConnectionTypeMatrix;
  IBOutlet NSButton* mUseSecureAuthButton;
  
  nsISupports* mSupportsObject;
}

@end

#pragma mark -

@interface OutgoingServersView : NSView <AccountManagerViewDelegate>
{
  IBOutlet NSTableView* mServersTableView;
  IBOutlet NSButton*    mAddButton;
  IBOutlet NSButton*    mRemoveButton;
  IBOutlet NSButton*    mSetDefaultButton;
  IBOutlet NSTextField* mDescriptionField;
  IBOutlet NSTextField* mServerNameField;
  IBOutlet NSTextField* mPortField;
  IBOutlet NSButton*    mUseUserAndPassCheckbox;
  IBOutlet NSTextField* mUserNameField;
  IBOutlet NSMatrix*    mSecureConnectionMatrix;
  
  NSMutableArray* mSmtpServers;
  SmtpServerItem* mCurSelectedServerItem;
  BOOL            mHasSetup;
}

-(IBAction)addServer:(id)sender;
-(IBAction)removeServer:(id)sender;
-(IBAction)setDefaultServer:(id)sender;
-(IBAction)setUseAuthentication:(id)sender;
-(IBAction)setSecureConnectionType:(id)sender;

@end
